/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Maestros.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import pe.edu.pucp.Maestros.DAO.AeropuertoDAO;
import pe.edu.pucp.Maestros.Vista.AeropuertoGUI;
import pe.edu.pucp.Maestros.Vista.BuscarAeropuertoGUI;
import pe.edu.pucp.Modelo.Aeropuerto;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author katy
 */
public class BuscarAeropuertoControlador {
    private AeropuertoDAO m;
    private BuscarAeropuertoGUI view ;
    private ArrayList<Aeropuerto> lstAeropuertos;
    private ArrayList<Ciudad> lstCiudades;
    private ArrayList<Pais> lstPais;
    private ArrayList<Continente> lstContinentes;
    private Usuario user;
    public BuscarAeropuertoControlador(AeropuertoDAO dao, BuscarAeropuertoGUI v, Usuario usr)
    {
        m = dao;
        view = v;
        view.mostrarPermisos(new  ArrayList<Permiso>(usr.getPerfil().getPermisos()));
        user = usr;
        loadCombos();
        inicializarTablaResultados(); 
        //Agrega todos los escucha para elementos de ventana
        view.addEditarButtonListener(new EditarButtonListerner());
        view.addBuscarButtonListener( new ListarAeropuertos() );
        view.addNuevoAeropuertoListener(new CrearNuevoAeropuertoListener());
        view.addLimpiarButtonListener(new LimpiarButtonListener());
        view.addCambiarContinente(new cambiarLstPais());
        view.addCambiarPais(new cambiarLstCiudad());  
    }
    
    private void loadCombos() {
        llenarContinenteCombo();
        view.llenarComboPais(null);
        view.llenarComboCiudad(null);
    }
            
    private void llenarCiudadCombo(Pais pa){
        lstCiudades = m.listarCiudad(pa.getIdpais());
        view.llenarComboCiudad(lstCiudades);
    }
    
    private void llenarContinenteCombo(){
        lstContinentes = m.listarContinente();
        view.llenarComboContinente(lstContinentes);
    }

    private void llenarPaisCombo(Continente cont){
        lstPais= m.listarPais(cont.getIdcontinente());
        view.llenarComboPais(lstPais);
    }   
    
    private void inicializarTablaResultados() {
        lstAeropuertos = m.listarAeropuertos(null, null, false);
        view.llenaGrilla(lstAeropuertos);
    }
    
    class cambiarLstPais implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            int id = view.getContinente();            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (id>=0){ llenarPaisCombo(lstContinentes.get(id)); }
                else { view.llenarComboPais(null); }
            }                            
        }        
    }  
    
    class cambiarLstCiudad implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {     
            int id = view.getPais();
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (id>=0){ llenarCiudadCombo(lstPais.get(id)); }
                else { view.llenarComboCiudad(null); }
            }                            
        }        
    } 
    
    class EditarButtonListerner implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int i = view.getSelectedAeropuerto();
            Aeropuerto aeropuerto;
            if (i >=0 ) {
                aeropuerto = lstAeropuertos.get(i);
                AeropuertoGUI v = new AeropuertoGUI(view.getPadre(),m, true);
                AeropuertoControlador c = new AeropuertoControlador(m, v, aeropuerto, user);
                v.setVisible(true);
                inicializarTablaResultados();
            } else 
               ValHelper.mostrarError("Debe seleccionar un aeropuerto");   
        }
    
    }
    
    class ListarAeropuertos implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {           
            int continente = (view.getContinente()<0? -1: lstContinentes.get(view.getContinente()).getIdcontinente());
            int pais = (view.getPais()<0? -1: lstPais.get(view.getPais()).getIdpais());
            int ciudad = (view.getCiudad()<0? -1: lstCiudades.get(view.getCiudad()).getIdciudad());
            
            lstAeropuertos = m.listarAeropuertos( continente, pais, ciudad, view.getFechaRegistro());           
            view.llenaGrilla(lstAeropuertos);
        }
    }
    
    class CrearNuevoAeropuertoListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            AeropuertoGUI p = new AeropuertoGUI(view.getPadre(), m, true);
            AeropuertoControlador c = new AeropuertoControlador (m,p, user);
            p.setVisible(true);
            inicializarTablaResultados();
        }
    
    }
    
    class LimpiarButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            inicializarTablaResultados();
        }
    }
}
